/*
 * Acervo.java
 * 
 * Created on 21/10/2011, 01:26:27
 */
package org.acervus.gui;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import org.acervus.acervo.AcervoBean;
import org.acervus.acervo.AcervoController;
import org.acervus.acervo.TipoAcervoController;
import org.acervus.helpers.DateUtils;

/**
 * @author Eziel Soares, Giordano Giuliano, Lenilson Regis
 */
public class Acervo extends javax.swing.JFrame {

    DefaultTableModel tmAcervo = new DefaultTableModel(null, new String[]{"Título", "Autor", "Ano", "Lançamento", "Tipo"});
    ListSelectionModel lsmAcervo;
    List<AcervoBean> acervo;
    String tipoCadastro = "";
    String tipoAcervo;

    /** Creates new form Acervo */
    public Acervo() {
        initComponents();
        this.setLocationRelativeTo(null);
    }

    private void tbAcervoLinhaSelecionada() {
        Date data = new Date();
        Date dataLancamento = new Date();
        String ano = "";
        String lancamento = "";

        if (tbAcervo.getSelectedRow() != -1) {

            // Seleciona o tipo de acervo a partir da linha selecionada
            // e define o índice do combobox
            cbTipoAcervo.setSelectedIndex(Integer.parseInt(acervo.get(tbAcervo.getSelectedRow()).getTipo()) - 1);

            limparCampos();

            // alimenta os campos a partir da linha selecionada
            tfTitulo.setText(acervo.get(tbAcervo.getSelectedRow()).getTitulo());
            tfAutor.setText(acervo.get(tbAcervo.getSelectedRow()).getAutor());
            tfInstituicao.setText(acervo.get(tbAcervo.getSelectedRow()).getInstituicao());
            tfEdicao.setText(String.valueOf(acervo.get(tbAcervo.getSelectedRow()).getEdicao()));
            tfNumero.setText(String.valueOf(acervo.get(tbAcervo.getSelectedRow()).getNumero()));
            tfEditora.setText(acervo.get(tbAcervo.getSelectedRow()).getEditora());

            try {
                data = new SimpleDateFormat("yyyy").parse(String.valueOf(acervo.get(tbAcervo.getSelectedRow()).getAno()));
                ano = new SimpleDateFormat("yyyy").format(data);

                if (acervo.get(tbAcervo.getSelectedRow()).getLancamento() != null) {
                    dataLancamento = new SimpleDateFormat("yyyy-MM-dd").parse(acervo.get(tbAcervo.getSelectedRow()).getLancamento());
                    lancamento = new SimpleDateFormat("dd/MM/yyyy").format(dataLancamento);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            tfLancamento.setText(lancamento);
            tfAno.setText(ano);
            tfIsbn.setText(acervo.get(tbAcervo.getSelectedRow()).getIsbn());
            tfUnidades.setText(String.valueOf(acervo.get(tbAcervo.getSelectedRow()).getUnidades()));
        } else {
            limparCampos();
        }

        btAlterar.setEnabled(true);
        btExcluir.setEnabled(true);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        btPesquisar = new javax.swing.JButton();
        tfPesquisarAcervo = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        tfTitulo = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfAutor = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tfInstituicao = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        tfEdicao = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        tfNumero = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        tfLancamento = new javax.swing.JTextField();
        try{
            javax.swing.text.MaskFormatter data= new javax.swing.text.MaskFormatter("##/##/####");
            tfLancamento = new javax.swing.JFormattedTextField(data);
        }
        catch (Exception e){
        }
        jLabel8 = new javax.swing.JLabel();
        tfEditora = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        tfAno = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        tfIsbn = new javax.swing.JTextField();
        jLabel11 = new javax.swing.JLabel();
        tfUnidades = new javax.swing.JTextField();
        btNovo = new javax.swing.JButton();
        btAlterar = new javax.swing.JButton();
        btExcluir = new javax.swing.JButton();
        btFechar = new javax.swing.JButton();
        jLabel12 = new javax.swing.JLabel();
        btSalvar = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tbAcervo = new javax.swing.JTable();
        cbTipoAcervo = new javax.swing.JComboBox();
        btCancelar = new javax.swing.JButton();

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Acervo");
        setName("Acervo"); // NOI18N

        jLabel1.setText("Pesquisar:");

        btPesquisar.setText("Pesquisar");
        btPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btPesquisarActionPerformed(evt);
            }
        });

        jLabel2.setText("Título:");

        tfTitulo.setEnabled(false);

        jLabel3.setText("Autor:");

        tfAutor.setEnabled(false);

        jLabel4.setText("Instituição:");

        tfInstituicao.setEnabled(false);

        jLabel5.setText("Ano:");

        tfEdicao.setEnabled(false);

        jLabel6.setText("Número:");

        tfNumero.setEnabled(false);

        jLabel7.setText("Lançamento:");

        tfLancamento.setEnabled(false);

        jLabel8.setText("Editora:");

        tfEditora.setEnabled(false);

        jLabel9.setText("Edição:");

        tfAno.setEnabled(false);

        jLabel10.setText("ISBN:");

        tfIsbn.setEnabled(false);

        jLabel11.setText("Unidades:");

        tfUnidades.setEnabled(false);

        btNovo.setText("Novo");
        btNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btNovoActionPerformed(evt);
            }
        });

        btAlterar.setText("Alterar");
        btAlterar.setEnabled(false);
        btAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAlterarActionPerformed(evt);
            }
        });

        btExcluir.setText("Excluir");
        btExcluir.setEnabled(false);
        btExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btExcluirActionPerformed(evt);
            }
        });

        btFechar.setText("Fechar");
        btFechar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btFecharActionPerformed(evt);
            }
        });

        jLabel12.setText("Tipo:");

        btSalvar.setText("Salvar");
        btSalvar.setEnabled(false);
        btSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btSalvarActionPerformed(evt);
            }
        });

        tbAcervo.setModel(tmAcervo);
        tbAcervo.setModel(tmAcervo);
        tbAcervo.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        lsmAcervo = tbAcervo.getSelectionModel();
        lsmAcervo.addListSelectionListener(new ListSelectionListener(){
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    tbAcervoLinhaSelecionada();
                }
            }
        });

        // Define o layuout da tabela
        tbAcervo.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        tbAcervo.getColumnModel().getColumn(0).setPreferredWidth(260);
        tbAcervo.getColumnModel().getColumn(1).setPreferredWidth(180);
        tbAcervo.getColumnModel().getColumn(2).setPreferredWidth(55);
        tbAcervo.getColumnModel().getColumn(3).setPreferredWidth(90);
        tbAcervo.getColumnModel().getColumn(4).setPreferredWidth(110);

        listarAcervo();
        tbAcervo.addAncestorListener(new javax.swing.event.AncestorListener() {
            public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
                tbAcervoAncestorAdded(evt);
            }
            public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
            }
            public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
            }
        });
        jScrollPane2.setViewportView(tbAcervo);

        cbTipoAcervo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Livro", "Revista", "Artigo Científico" }));
        cbTipoAcervo.setToolTipText("");
        cbTipoAcervo.setEnabled(false);
        cbTipoAcervo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                selecionaTipoAcervo(evt);
            }
        });

        btCancelar.setText("Cancelar");
        btCancelar.setEnabled(false);
        btCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel1)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(tfPesquisarAcervo, javax.swing.GroupLayout.PREFERRED_SIZE, 465, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(btPesquisar, javax.swing.GroupLayout.DEFAULT_SIZE, 121, Short.MAX_VALUE))
                            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 681, Short.MAX_VALUE)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(tfIsbn, javax.swing.GroupLayout.DEFAULT_SIZE, 243, Short.MAX_VALUE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel10)
                                        .addGap(219, 219, 219)))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(tfAno, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(tfNumero, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(tfLancamento, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(tfEdicao, javax.swing.GroupLayout.DEFAULT_SIZE, 63, Short.MAX_VALUE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel5)
                                        .addGap(314, 314, 314)))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel11)
                                    .addComponent(tfUnidades, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(jLabel12, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(cbTipoAcervo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 213, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                        .addComponent(jLabel2)
                                        .addGap(12, 12, 12))
                                    .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(tfInstituicao, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE)
                                    .addComponent(tfTitulo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 337, javax.swing.GroupLayout.PREFERRED_SIZE))
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(12, 12, 12)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLabel3)
                                            .addComponent(tfAutor, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
                                            .addComponent(jLabel8)
                                            .addComponent(tfEditora, javax.swing.GroupLayout.DEFAULT_SIZE, 332, Short.MAX_VALUE)
                                            .addGroup(layout.createSequentialGroup()
                                                .addComponent(jLabel6)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                .addComponent(jLabel9))))
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                        .addGap(105, 105, 105)
                                        .addComponent(btNovo, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(btExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(btAlterar, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE))))))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(461, 461, 461)
                        .addComponent(btCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btSalvar, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btFechar, javax.swing.GroupLayout.DEFAULT_SIZE, 66, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(tfPesquisarAcervo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btPesquisar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel12)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(cbTipoAcervo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(12, 12, 12)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(15, 15, 15)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(btAlterar)
                            .addComponent(btExcluir)
                            .addComponent(btNovo))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tfTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfAutor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tfInstituicao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfEditora, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel10)
                    .addComponent(jLabel5)
                    .addComponent(jLabel6)
                    .addComponent(jLabel7)
                    .addComponent(jLabel9)
                    .addComponent(jLabel11))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tfIsbn, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfAno, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfNumero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfLancamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfEdicao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tfUnidades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btFechar)
                    .addComponent(btSalvar)
                    .addComponent(btCancelar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void btNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btNovoActionPerformed
    tipoCadastro = "novo";
    novoAcervo();
}//GEN-LAST:event_btNovoActionPerformed

private void btPesquisarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btPesquisarActionPerformed
    listarAcervo();
}//GEN-LAST:event_btPesquisarActionPerformed

    private void btSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btSalvarActionPerformed
        if (tipoCadastro.equals("novo")) {
            verificaTipoAcervo();
            cadastrarAcervo();
            tipoCadastro = "";
        } else if (tipoCadastro.equals("alteração")) {
            verificaTipoAcervo();
            alterarAcervo();
            tipoCadastro = "";
        }
    }//GEN-LAST:event_btSalvarActionPerformed

    private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAlterarActionPerformed
        tipoCadastro = "alteração";
        alteraAcervo();
    }//GEN-LAST:event_btAlterarActionPerformed

    private void btFecharActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFecharActionPerformed
        desabilitarCampos();
        this.dispose();
    }//GEN-LAST:event_btFecharActionPerformed

    private void tbAcervoAncestorAdded(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_tbAcervoAncestorAdded
        // TODO add your handling code here:
    }//GEN-LAST:event_tbAcervoAncestorAdded

    private void btCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelarActionPerformed
        // TODO add your handling code here:
        desabilitarCampos();
        cbTipoAcervo.setEnabled(false);
        btSalvar.setEnabled(false);
        btCancelar.setEnabled(false);
        tipoCadastro = "";
    }//GEN-LAST:event_btCancelarActionPerformed

    private void selecionaTipoAcervo(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selecionaTipoAcervo
        // TODO add your handling code here:
        if (tipoCadastro.equals("novo") || tipoCadastro.equals("alteração")) {
            verificaTipoAcervo();

            if (tipoAcervo.equals("livro")) {
                desabilitarCampos();
                habilitarCamposLivro();
            } else if (tipoAcervo.equals("revista")) {
                desabilitarCampos();
                habilitarCamposRevista();
            } else if (tipoAcervo.equals("artigo")) {
                desabilitarCampos();
                habilitarCamposArtigo();
            }
        }
    }//GEN-LAST:event_selecionaTipoAcervo

    private void btExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btExcluirActionPerformed
        // TODO add your handling code here:
        excluirAcervo();
    }//GEN-LAST:event_btExcluirActionPerformed

    private void alteraAcervo() {
        if (tbAcervo.getSelectedRow() != -1) {
            btCancelar.setEnabled(true);
            btSalvar.setEnabled(true);
            verificaTipoAcervo();

            if (tipoAcervo.equals("livro")) {
                habilitarCamposLivro();
            } else if (tipoAcervo.equals("revista")) {
                habilitarCamposRevista();
            } else if (tipoAcervo.equals("artigo")) {
                habilitarCamposArtigo();
            }
        } else {
            JOptionPane.showMessageDialog(this, "Selecione um acervo!");
        }
    }

    private void listarAcervo() {
        AcervoController ace = new AcervoController();
        acervo = ace.listarAcervo("%" + tfPesquisarAcervo.getText().trim() + "%");
        mostrarAcervo(acervo);
    }

    private void mostrarAcervo(List<AcervoBean> acervos) {

        while (tmAcervo.getRowCount() > 0) {
            tmAcervo.removeRow(0);
        }

        if (acervos.isEmpty()) {
            JOptionPane.showMessageDialog(this, "Nenhum acervo encontrado!");
        } else {
            Date data = new Date();
            Date dataLancamento = new Date();
            String ano = "";
            String lancamento = "";
            String[] campos = new String[]{null, null, null, null, null};
            for (int i = 0; i < acervos.size(); i++) {
                tmAcervo.addRow(campos);
                tmAcervo.setValueAt(acervos.get(i).getTitulo(), i, 0);
                tmAcervo.setValueAt(acervos.get(i).getAutor(), i, 1);

                try {
                    data = new SimpleDateFormat("yyyy-MM-dd").parse(acervos.get(i).getAno());
                    ano = new SimpleDateFormat("yyyy").format(data);

                    if (acervos.get(i).getLancamento() != null) {
                        dataLancamento = new SimpleDateFormat("yyyy-MM-dd").parse(acervos.get(i).getLancamento());
                        lancamento = new SimpleDateFormat("dd/MM/yyyy").format(dataLancamento);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

                tmAcervo.setValueAt(ano, i, 2);
                tmAcervo.setValueAt(lancamento, i, 3);

                TipoAcervoController tac = new TipoAcervoController();
                tmAcervo.setValueAt(tac.getTipoAcervo(Integer.parseInt(acervos.get(i).getTipo())), i, 4);
            }
        }
    }

    private void novoAcervo() {
        limparCampos();
        cbTipoAcervo.setEnabled(true);
        btSalvar.setEnabled(true);
        btCancelar.setEnabled(true);
        btExcluir.setEnabled(false);
        btAlterar.setEnabled(false);
        verificaTipoAcervo();
        desabilitarCampos();

        if (tipoAcervo.equals("livro")) {
            habilitarCamposLivro();
        } else if (tipoAcervo.equals("revista")) {
            habilitarCamposRevista();
        } else if (tipoAcervo.equals("artigo")) {
            habilitarCamposArtigo();
        }
    }

    private void alterarAcervo() {
        if (tipoAcervo.equals("livro")) {
            if (verificarCampos("livro")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setId(acervo.get(tbAcervo.getSelectedRow()).getId());
                acervus.setTitulo(tfTitulo.getText());
                acervus.setAutor(tfAutor.getText());
                acervus.setEditora(tfEditora.getText());
                acervus.setAno(tfAno.getText());
                acervus.setEdicao(Integer.parseInt(tfEdicao.getText()));
                acervus.setIsbn(tfIsbn.getText());
                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.alterarAcervo(acervus, "livro");
                JOptionPane.showMessageDialog(this, "Livro alterado com sucesso!");
                desabilitarCampos();
                btSalvar.setEnabled(false);
                listarAcervo();
            }
        }

        if (tipoAcervo.equals("revista")) {
            if (verificarCampos("revista")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setId(acervo.get(tbAcervo.getSelectedRow()).getId());
                acervus.setTitulo(tfTitulo.getText());
                acervus.setEditora(tfEditora.getText());
                acervus.setAno(tfAno.getText());
                acervus.setNumero(Integer.parseInt(tfNumero.getText()));

                DateUtils data_lancamento = new DateUtils(tfLancamento.getText().trim());
                acervus.setLancamento(data_lancamento.getDataISO());

                if (!tfEdicao.getText().equals("")) {
                    acervus.setEdicao(Integer.parseInt(tfEdicao.getText()));
                } else {
                    acervus.setEdicao(0);
                }

                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.alterarAcervo(acervus, "revista");
                JOptionPane.showMessageDialog(this, "Revista alterada com sucesso!");
                desabilitarCampos();
                listarAcervo();
            }
        }

        if (tipoAcervo.equals("artigo")) {
            if (verificarCampos("artigo")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setId(acervo.get(tbAcervo.getSelectedRow()).getId());
                acervus.setTitulo(tfTitulo.getText());
                acervus.setAutor(tfAutor.getText());
                acervus.setInstituicao(tfInstituicao.getText());
                acervus.setAno(tfAno.getText());
                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.alterarAcervo(acervus, "artigo");
                JOptionPane.showMessageDialog(this, "Artigo alterado com sucesso!");
                desabilitarCampos();
                listarAcervo();
            }
        }
    }

    private void cadastrarAcervo() {
        if (tipoAcervo.equals("livro")) {
            if (verificarCampos("livro")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setTitulo(tfTitulo.getText());
                acervus.setAutor(tfAutor.getText());
                acervus.setEditora(tfEditora.getText());
                acervus.setAno(tfAno.getText());
                acervus.setEdicao(Integer.parseInt(tfEdicao.getText()));
                acervus.setIsbn(tfIsbn.getText());
                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.cadastrarAcervo(acervus, "livro");
                JOptionPane.showMessageDialog(this, "Livro cadastrado com sucesso!");
                desabilitarCampos();
                btSalvar.setEnabled(false);
                listarAcervo();
            }
        }

        if (tipoAcervo.equals("revista")) {
            if (verificarCampos("revista")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setTitulo(tfTitulo.getText());
                acervus.setEditora(tfEditora.getText());
                acervus.setAno(tfAno.getText());
                acervus.setNumero(Integer.parseInt(tfNumero.getText()));

                DateUtils data_lancamento = new DateUtils(tfLancamento.getText().trim());
                acervus.setLancamento(data_lancamento.getDataISO());

                if (!tfEdicao.getText().equals("")) {
                    acervus.setEdicao(Integer.parseInt(tfEdicao.getText()));
                } else {
                    acervus.setEdicao(0);
                }


                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.cadastrarAcervo(acervus, "revista");
                JOptionPane.showMessageDialog(this, "Revista cadastrada com sucesso!");
                desabilitarCampos();
                listarAcervo();
            }
        }

        if (tipoAcervo.equals("artigo")) {
            if (verificarCampos("artigo")) {
                AcervoController ac = new AcervoController();
                AcervoBean acervus = new AcervoBean();
                acervus.setTitulo(tfTitulo.getText());
                acervus.setAutor(tfAutor.getText());
                acervus.setInstituicao(tfInstituicao.getText());
                acervus.setAno(tfAno.getText());
                acervus.setUnidades(Integer.parseInt(tfUnidades.getText()));
                ac.cadastrarAcervo(acervus, "artigo");
                JOptionPane.showMessageDialog(this, "Artigo cadastrado com sucesso!");
                desabilitarCampos();
                listarAcervo();
            }
        }
    }

    private void excluirAcervo() {
        int opcao;

        AcervoBean ac = new AcervoBean();
        ac.setId(acervo.get(tbAcervo.getSelectedRow()).getId());
        ac.setTipo(cbTipoAcervo.getModel().getSelectedItem().toString().trim());

        opcao = JOptionPane.showConfirmDialog(null, "Tem certeza que deseja excluir este(a) " + ac.getTipo() + " do acervo?", "Excluir Item do Acervo",
                JOptionPane.YES_NO_OPTION);

        if (opcao == JOptionPane.YES_OPTION) {
            AcervoController acc = new AcervoController();
            acc.removerAcervo(ac);
            listarAcervo();
        }
    }

    private boolean verificaUnidades() {
        if (tfUnidades.getText().trim().equals("")) {
            return false;
        } else {
            try {
                int unidades = Integer.parseInt(tfUnidades.getText().trim());
            } catch (NumberFormatException ex) {
                ex.printStackTrace();
                return false;
            }
        }
        int unidades = Integer.parseInt(tfUnidades.getText().trim());
        if (unidades <= 0) {
            return false;
        }
        return true;
    }

    private boolean verificaTitulo() {
        if (tfTitulo.getText().trim().equals("")) {
            return false;
        }
        return true;
    }

    private boolean verificarCampos(String tipo) {
        if (!tfTitulo.getText().trim().equals("")) {
            return true;
        } else {
            JOptionPane.showMessageDialog(this, "Título não informado!");
        }

        if (!tfAno.getText().trim().equals("")) {
            return true;
        } else {
            JOptionPane.showMessageDialog(this, "Ano não informado!");
        }

        if (!tfUnidades.getText().trim().equals("")) {
            return true;
        } else {
            JOptionPane.showMessageDialog(this, "Unidades não informada!");
        }

        if (tipo.equals("livro") || tipo.equals("revista")) {
            if (!tfEditora.getText().trim().equals("")) {
                return true;
            } else {
                JOptionPane.showMessageDialog(this, "Editora não informada!");
            }
        }

        return false;
    }

    private void habilitarCamposLivro() {
        tfTitulo.setEnabled(true);
        tfAutor.setEnabled(true);
        tfEdicao.setEnabled(true);
        tfEditora.setEnabled(true);
        tfAno.setEnabled(true);
        tfIsbn.setEnabled(true);
        tfUnidades.setEnabled(true);
    }

    private void habilitarCamposRevista() {
        tfTitulo.setEnabled(true);
        tfEdicao.setEnabled(true);
        tfNumero.setEnabled(true);
        tfLancamento.setEnabled(true);
        tfEditora.setEnabled(true);
        tfAno.setEnabled(true);
        tfUnidades.setEnabled(true);
    }

    private void habilitarCamposArtigo() {
        tfTitulo.setEnabled(true);
        tfAutor.setEnabled(true);
        tfInstituicao.setEnabled(true);
        tfAno.setEnabled(true);
        tfUnidades.setEnabled(true);
    }

    private void desabilitarCampos() {
        tfTitulo.setEnabled(false);
        tfAutor.setEnabled(false);
        tfInstituicao.setEnabled(false);
        tfEdicao.setEnabled(false);
        tfNumero.setEnabled(false);
        tfLancamento.setEnabled(false);
        tfEditora.setEnabled(false);
        tfAno.setEnabled(false);
        tfIsbn.setEnabled(false);
        tfUnidades.setEnabled(false);
    }

    private void limparCampos() {
        tfTitulo.setText("");
        tfAutor.setText("");
        tfInstituicao.setText("");
        tfEdicao.setText("");
        tfNumero.setText("");
        tfLancamento.setText("");
        tfEditora.setText("");
        tfAno.setText("");
        tfIsbn.setText("");
        tfUnidades.setText("");
    }

    private void verificaTipoAcervo() {
        if (cbTipoAcervo.getModel().getSelectedItem().equals("Livro")) {
            tipoAcervo = "livro";
        } else if (cbTipoAcervo.getModel().getSelectedItem().equals("Revista")) {
            tipoAcervo = "revista";
        } else if (cbTipoAcervo.getModel().getSelectedItem().equals("Artigo Científico")) {
            tipoAcervo = "artigo";
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Acervo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Acervo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Acervo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Acervo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Acervo().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAlterar;
    private javax.swing.JButton btCancelar;
    private javax.swing.JButton btExcluir;
    private javax.swing.JButton btFechar;
    private javax.swing.JButton btNovo;
    private javax.swing.JButton btPesquisar;
    private javax.swing.JButton btSalvar;
    private javax.swing.JComboBox cbTipoAcervo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTable jTable1;
    private javax.swing.JTable tbAcervo;
    private javax.swing.JTextField tfAno;
    private javax.swing.JTextField tfAutor;
    private javax.swing.JTextField tfEdicao;
    private javax.swing.JTextField tfEditora;
    private javax.swing.JTextField tfInstituicao;
    private javax.swing.JTextField tfIsbn;
    private javax.swing.JTextField tfLancamento;
    private javax.swing.JTextField tfNumero;
    private javax.swing.JTextField tfPesquisarAcervo;
    private javax.swing.JTextField tfTitulo;
    private javax.swing.JTextField tfUnidades;
    // End of variables declaration//GEN-END:variables
}